iT邦幫忙

2022 iThome 鐵人賽

DAY 5
0
自我挑戰組

iOS Junior的菜雞之路系列 第 5

形形色色,模樣打底

  • 分享至 

  • xImage
  •  

目前對於這個電影App還算是有個模糊的雛形,必須要先為這個樣子給打底

目前是打底的模板

cell建構

  1. 建立一個tableViewCell with Xib

tableView建構

因為要使用Xib的方式建立,所以在選單選擇建立UIViewController with Xib
那麼為什麼不用UITableViewController直接建立?
也沒什麼就算是一個習慣

Xib中建立一個tableView然後拉@IBOutlet
應該會長得像這樣

@IBOutlet weak var tableView: UITableView!

新增register來註冊CollectionView

像我的習慣會是

@IBOutlet weak var tableView: UITableView! {
    didSet {
        tableView.delegate = self
        tableView.dataSource = self
        // 自定義Func,來在tableView註冊該cell
        // 自定義Func在下面
        tableView.register(forCellReuseIdentifiers: [
            String(describing: ExampleTableViewCell.self)
        ]))
    }
}

推薦好用Func

可以寫在Extension內開放給UITableView使用

public func register(forCellReuseIdentifiers: [String]) {
        for item in forCellReuseIdentifiers {
            self.register(UINib(nibName: item, bundle: nil), forCellReuseIdentifier: item)
        }
    }

DataSource

建議可以寫在Extension內部,這樣上方不會那麼亂

class ExampleTableViewController: UIViewController {
    
}

extension ExampleTableViewController: UITableViewDataSource, UITableViewDelegate {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // 根據前天寫說的 ViewModel架構,此時的data來源應該是ViewModel
        return viewModel.dataList.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // 會從ViewModel內部取得每個Cell的資料
        let dataList = viewModel.dataList[indexPath.row]
        let cell: ExampleTableViewCell = tableView.dequeueReusableCell(withIdentifier: String(describing: ExampleTableViewCell.self), for: indexPath) as? ExampleTableViewCell
        return cell
    }
}

這樣就完成這次的打底


坑:
之前踩過一個坑,在register的時候一直沒看清楚Doc要的是什麼,所以填上錯誤的型別,但是因為他沒有報錯所以也就沒有發現,只發現他一直建立不起來.....

也常常會忘記要去register


上一篇
架構不會,亂七八糟(MVVM下)
下一篇
滑動簡單,但不失優雅 UICollectionView
系列文
iOS Junior的菜雞之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言